/*
 * ColumnCellEditorPropertiesDisponibleColumnValue.java
 * 
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * 
 * Creado el 18/04/2010, 11:31:30 PM
 */
package com.ufps.cuatro.util.editor;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

import com.ufps.cuatro.modelo.representacion.ParametroPropiedad;
import com.ufps.cuatro.modelo.representacion.Propiedad;
import com.ufps.cuatro.modelo.representacion.componente.Componente;

/**
 * <i><b>ColumnCellEditorPropertiesDisponibleColumnValue:</b></i> <p>Esta Clase se
 * encarga de Administrar las Propiedades Disponibles para el Componente Generado.</p>
 * <p>Esta Clase se apoya de otras clases editoras para dar soporte de acuerdo al tipo
 * de dato de la propiedad seleccionada.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 18/04/2010
 * @see AbstractCellEditor
 * @see TableCellEditor
 */
public class ColumnCellEditorPropertiesDisponibleColumnValue extends AbstractCellEditor implements TableCellEditor{
    private static final long serialVersionUID = 5517167209392663961L;

    private Object obj;
    private Componente objComponente;
    
    /**
     * Constructor por Defecto.
     * @param objComponente Referencia Componente que actualizará la Propiedad.
     */
    public ColumnCellEditorPropertiesDisponibleColumnValue(Componente objComponente) {    
        this.objComponente = objComponente;
    }

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {        
        
        if(column == 1 && value instanceof Propiedad){            
            this.obj = value;
            Propiedad objPropiedad = (Propiedad) value;
            int i = objComponente.getObjPropiedadesDisponibles().indexOf(objPropiedad);       
            if(objPropiedad.getObjParametrosSet().size() == 1){
                ParametroPropiedad objParametro = objPropiedad.getObjParametrosSet().get(0);
                objPropiedad.strValueTempParametro = objParametro.getStrValue();
                if(objParametro.getStrEditor().equals("JCheckBox")){
                    if(!objParametro.getStrValue().isEmpty()){
                        if(objParametro.getStrValue().equals("true") ||objParametro.getStrValue().equals("false")){
                            return new CheckBoxTableProperties(objPropiedad, "", Boolean.valueOf(objParametro.getStrValue()));
                        }
                        else{
                            return new CheckBoxTableProperties(objPropiedad, "", false);
                        }
                    }                
                    else{
                        return new CheckBoxTableProperties(objPropiedad, "", false);
                    }
                }
                else if(objParametro.getStrEditor().equals("JTextField")){
                    if(!objParametro.getStrValue().isEmpty()){
                        String valor = objParametro.getStrValue();
                        return new TextFieldTableProperties(objPropiedad, valor);
                    }                
                    else{
                        return new TextFieldTableProperties(objPropiedad);
                    }
                }
                else if(objParametro.getStrEditor().equals("JColorChooser")){
                    if(!objParametro.getStrValue().isEmpty()){                    
                        return new ColorDialogTableProperties(objPropiedad);
                    }                
                    else{
                        return new ColorDialogTableProperties(objPropiedad);
                    }
                }
                else if(objParametro.getStrEditor().equals("JFileChooser")){
                    if(!objParametro.getStrValue().isEmpty()){                    
                        return new PathDialogTableProperties(objPropiedad);
                    }                
                    else{
                        return new PathDialogTableProperties(objPropiedad);
                    }
                }
                return new JLabel(objParametro.getStrValue());
            }
            else{
                return new JLabel("");
            }
        }
        return new JLabel("");
    }

    public Object getCellEditorValue() {
        return this.obj;
    }
}